package com.donglan.pethome.pet.service.impl;

import com.donglan.pethome.basic.service.impl.BaseServiceImpl;
import com.donglan.pethome.basic.util.CodeGenerateUtils;
import com.donglan.pethome.order.domain.PetAcquisitionOrder;
import com.donglan.pethome.pet.domain.Pet;
import com.donglan.pethome.pet.domain.PetDetail;
import com.donglan.pethome.pet.domain.SearchMasterMessage;
import com.donglan.pethome.order.mapper.PetAcquisitionOrderMapper;
import com.donglan.pethome.pet.mapper.PetDetailMapper;
import com.donglan.pethome.pet.mapper.SearchMasterMsgMapper;
import com.donglan.pethome.pet.service.PetService;
import com.donglan.pethome.pet.util.TemporaryAsShopLogin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;

/**
 * @Author: zhangdonghui
 * @Date: 2022/2/15 23:42
 */
@Service
public class PetServiceImpl extends BaseServiceImpl<Pet> implements PetService {

    @Autowired
    private PetDetailMapper petDetailMapper;
    @Autowired
    private SearchMasterMsgMapper searchMasterMsgMapper;
    @Autowired
    private PetAcquisitionOrderMapper petAcquisitionOrderMapper;

    @Transactional
    @Override
    public void add(Pet pet) {

        // 处理完待处理寻主信息之后，需要更改状态state
        SearchMasterMessage searchMasterMessage = pet.getSearchMasterMessage();
        // 把状态改为1，代表寻主信息已经处理
        searchMasterMessage.setState(1);
        // 别忘了去xml文件中写SQL标签
        searchMasterMsgMapper.update(searchMasterMessage);
        // 保存宠物
        super.add(pet);
        // 获取宠物详情
        PetDetail detail = pet.getDetail();
        detail.setPet(pet);
        // 添加宠物详情
        petDetailMapper.add(detail);

        // 添加收购订单
        PetAcquisitionOrder order = createAcquisitionOrder(pet);
        petAcquisitionOrderMapper.add(order);
    }

    /*
     * 功能描述 添加收购订单
     * @author zhangdonghui
     * @date 2022/2/22 15:28
     * @param pet
     * @return com.donglan.pethome.order.domain.PetAcquisitionOrder
     */
    private PetAcquisitionOrder createAcquisitionOrder(Pet pet) {
        PetAcquisitionOrder order = new PetAcquisitionOrder();
        // 摘要
        order.setDigest("【摘要】对"+pet.getName()+"的收购订单");
        // 收购地址：发布人发布的寻主信息中的发布地址
        order.setAddress(pet.getSearchMasterMessage().getAddress());
        // 员工：后台当前的登录用户
        order.setEmployee(TemporaryAsShopLogin.getLoginUser());
        // 订单编号，独一无二，使用工具类[CodeGenerateUtils]来生成
        order.setOrderSn(CodeGenerateUtils.generateOrderSn(order.getEmployee().getId()));
        // 支付编号，限制为空
        order.setPaySn("");
        // 支付类型 0垫付 1余额 2银行转账
        order.setPaytype(0);// 这里是写死的，主要业务放在后端，后期自己可以调整
        // 收购价格：成本价
        order.setPrice(pet.getCostprice());
        // 店铺
        order.setShop(pet.getShop());
        // 宠物
        order.setPet(pet);
        // 订单状态：支付方式为垫付，那么，我们的订单状态就应该时带报账
        // 0 待支付(余额支付) 1 待报账(垫付) 2 待打款(银行转账)  3 完成
        if(order.getPaytype() == 0){
            order.setState(order.getPrice().equals(BigDecimal.ZERO)? 3 : 1);
        } else if(order.getPaytype() == 2){
            order.setState(order.getPrice().equals(BigDecimal.ZERO)? 3 : 2);
        }

        // 发布人
        order.setUser(pet.getUser());
        return order;
    }
}
